﻿'''
题目描述
在一款虚拟游戏中生活，你必须进行投资以增强在虚拟游戏中的资产以免被淘汰出局。
现有一家Bank，它提供有若干理财产品 m 个，风险及投资回报不同，你有 N（元）进行投资，能接收的总风险值为X。
你要在可接受范围内选择最优的投资方式获得最大回报。
备注：
在虚拟游戏中，每项投资风险值相加为总风险值；
在虚拟游戏中，最多只能投资2个理财产品；
在虚拟游戏中，最小单位为整数，不能拆分为小数；
投资额*回报率=投资回报
输入描述
第一行：
产品数（取值范围[1,20]）
总投资额（整数，取值范围[1, 10000]）
可接受的总风险（整数，取值范围[1,200]）
第二行：产品投资回报率序列，输入为整数，取值范围[1,60]
第三行：产品风险值序列，输入为整数，取值范围[1, 100]
第四行：最大投资额度序列，输入为整数，取值范围[1, 10000]
输出描述
每个产品的投资额序列
示例1
输入
5 100 10
10 20 30 40 50
3 4 5 6 10
20 30 20 40 30
输出
0 30 0 40 0
说明
投资第二项30个单位，第四项40个单位，总的投资风险为两项相加为4+6=10
解题思路
在满足总风险不超过容忍度和总投资额不超过预算的前提下，通过遍历选择单个或两个理财产品的组合来最大化投资回报。
伪代码如下：
初始化最大回报值为0。
遍历所有理财产品：
a. 如果单个产品的风险值和投资额均不超过限制，考虑其回报值。
b. 更新最大回报值。
再次遍历所有理财产品组合（两两配对）：
a. 如果两个产品的风险值之和和投资额之和均不超过限制，考虑这两个产品的回报值之和。
b. 更新最大回报值。
返回最大回报值。
'''
# 使用input()替换sys.stdin.readline()以适应在线编译器
#输入描述：
#第一行：
#产品数（取值范围[1,20]）
#总投资额（整数，取值范围[1, 10000]）
#可接受的总风险（整数，取值范围[1,200]）
#第二行：产品投资回报率序列，输入为整数，取值范围[1,60]
#第三行：产品风险值序列，输入为整数，取值范围[1, 100]
#第四行：最大投资额度序列，输入为整数，取值范围[1, 10000]
#输出描述：
#每个产品的投资额序列

#读取第一行：产品数、总投资额、可接受总风险
product_counts,total_money,total_risk = map(int,input().split())
#读取第二行：产品投资回报率序列
product_rates = list(map(int,input().split()))
#读取第三行：产品风险值序列
product_risks = list(map(int,input().split()))
#读取第四行：最大投资额度序列
max_investments = list(map(int,input().split()))

#遍历产品风险值序列，满足<总风险值，则更新投资额和最大回报
max_return = 0
output_list = [0] * len(max_investments)    #将来输出的产品投资额序列
for i in range(len(product_risks)):
    if product_risks[i] <= total_risk:   #当前产品小于总风险值
        max_invest_i = min(total_money,max_investments[i])  #当前产品最大可投资额
        current_return = max_invest_i * product_rates[i]    #当前产品最大回报
        if current_return > max_return: #大于最大回报
            max_return = current_return #更新最大回报值
            output_list = [0] * len(max_investments)    #清空列表并加入新的组合
            output_list[i] = max_invest_i
        #遍历i之后产品风险值，计算两个产品(i,j)组合最大回报
        for j in range(i+1,len(product_risks)):
            #如果两个产品组合小于总风险值
            if product_risks[i] + product_risks[j] <= total_risk:
                #1.先分配i可用最大投资额并计算回报
                max_invest_i = min(total_money,max_investments[i])
                #剩余j可分配最大投资额
                max_invest_j = min(total_money - max_invest_i,max_investments[j])
                #计算最大回报
                current_return = max_invest_i * product_rates[i] + max_invest_j * product_rates[j]
                if current_return > max_return: #大于最大回报
                    max_return = current_return #更新最大回报
                    output_list = [0] * len(max_investments)    #清空列表并加入新的组合
                    output_list[i],output_list[j] = max_invest_i,max_invest_j
                #2.先分配j可用最大投资额并计算回报
                max_invest_j = min(total_money,max_investments[j])
                #剩余i可分配最大投资额
                max_invest_i = min(total_money - max_invest_j,max_investments[i])
                #计算最大回报
                current_return = max_invest_i * product_rates[i] + max_invest_j * product_rates[j]
                if current_return > max_return: #大于最大回报
                    max_return = current_return #更新最大回报
                    output_list = [0] * len(max_investments)    #清空列表并加入新的组合
                    output_list[i],output_list[j] = max_invest_i,max_invest_j
#输出每个产品的最佳投资额
print(' '.join([str(invest) for invest in output_list]))

